// 2013-8-9下午09:02:50  net.betou.trade.admin.action.ReportAct.java

package net.betou.trade.admin.action;

import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.betou.common.util.DateUtils;
import net.betou.pojo.Report;
import net.betou.trade.main.manager.UserMng;

import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * 报表实现，分日报表，月报表，季度报表，年报表
 * 日报表： 从0 点 0点, 查询的时候按照注册时间按照点排列
 * 月报表： 1日-31日  // 按照日排列
 * 季度报表： 1月  2月  3月 
 * 年度报表： 年
 * 
 *  统计： 居间商、居间商的管理员、会员
 *  在线统计： 登录之后，需要修改用户表的某个字段来保持是否在线
 *  
 *  select date_format(reg_date,'%Y-%m-%d') from trade_user where year(reg_date)='2013' group by day(reg_date);

# 按时间点来查询
select count(*), hour( reg_date ) from trade_user  group by hour(reg_date)
数组要保持顺序， 有一个pojo, 里面为dayReport 
int hour, int count
有一个key的列表, 0点-23点的， 每次读取出来就循环这个列表

 * @author 叶装装
 */
@Controller
public class ReportAct{
	
	@RequestMapping( "/report/day.jspx")
	public String dayReport( String day, HttpServletRequest request, HttpServletResponse response, ModelMap model ){
		// 统计会员表的时间， 得到日的
		List< String > dayList = userMng.findDayReportChoice( DateUtils.getYear( new Date( ) ) );
		
		model.addAttribute( "dayList", dayList );
		
		if( StringUtils.isBlank( day ) && dayList.size()>0 ){
			day = dayList.get( 0 );
		}
		model.addAttribute( "day", day );
		
		List< Report > reportList = userMng.findDayReport( day );
		Map< Integer, Long > reportMap = new LinkedHashMap< Integer, Long >( );
		
		for( int i = 0; i < 24; i++ ){
			reportMap.put( i, 0L );
		}
		
		for( Report r : reportList ){
			reportMap.put( r.getTime( ), r.getCount( ) );
		}
		
		model.addAttribute( "report", reportMap.values( ) );
		
		return "report/day";
	}
	
	@RequestMapping( "/report/month.jspx")
	public String monthReport( String month, HttpServletRequest request, HttpServletResponse response, ModelMap model ){
		List< String > monthList = userMng.findMonthReportChoice( DateUtils.getYear( new Date( ) )  );
		model.addAttribute( "monthList", monthList );
		
		if( StringUtils.isBlank( month ) && monthList.size()>0 ){
			month = monthList.get( 0 );
		}
		
		List< Report > reportList = userMng.findMonthReport( month );
		Map< Integer, Long > reportMap = new LinkedHashMap< Integer, Long >( );
		
		for( int i = 1; i < 13; i++ ){
			reportMap.put( i, 0L );
		}
		
		for( Report r : reportList ){
			reportMap.put( r.getTime( ), r.getCount( ) );
		}
		
		model.addAttribute( "report", reportMap.values( ) );
		
		
		model.addAttribute( "month", month );
		
		return "report/month";
	}
	
	@Autowired
	private UserMng userMng;
}
